#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<wait.h>

void worker()
{
    int cnt=5;
    while(cnt--)
    {
        printf("I am a child process,pid:%d,ppid:%d\n",getpid(),getppid()); 
        sleep(1);
    }
}

int main()
{
    pid_t id=fork();
    if(id==0)
    {
        //子进程
        worker();
        exit(0);
    }
    else
    {
        sleep(10);
        //父进程
        pid_t rid=wait(NULL);
        if(rid==id)
        {
            printf("wait success,pid:%d\n",getpid());
        }
        sleep(10);
    }
    return 0;
}

//int fun()
//{
//    printf("call fun function done!\n");
//    
//    _exit(22);
//
//    //exit(21);
//
//    //return 11;
//}
//int main()
//{
//    fun();
//
//    printf("I am a process,pid:%d,ppid:%d\n",getpid(),getppid());
//
//    _exit(23);  //进程正常退出的第三种方式：调用_exit函数
//        //_exit是系统调用,头文件是<unistd>
//        //_exit终止进程的时候不会自动刷新缓冲区
//
//
//    //exit(12);   //进程正常退出的第二种方式：调用exit函数
//        //exit是库函数,头文件是<stdlib.h>
//        //exit终止进程的时候会自动刷新缓冲区
//        //任意地方调用exit函数，都会表示直接退出进程（正常终止进程），不进行代码中的后续执行
//        
//
//    //return 21;    //进程正常退出的第一种方式：从main函数return
//        //1.在main函数中直接return,表示进程结束
//        //2.在其他函数中进行return,表示的是函数调用结束
//}
